package com.freesky.web.manager.service;

import com.freesky.common.pojo.DataTablesResult;
import com.freesky.common.utils.reponse.JSONResponse;
import com.freesky.common.dao.entity.Permission;
import com.freesky.common.dao.entity.Role;
import com.freesky.common.dao.entity.User;

import java.util.Set;

/**
 * @author Freesky
 */
public interface UserService {

    /**
     * 通过用户名获取角色
     * @param username
     * @return
     */
    Set<String> getRoles(String username);

    /**
     * 通过用户名获取权限
     * @param username
     * @return
     */
    Set<String> getPermissions(String username);

    /**
     * 获取角色列表
     * @return
     */
    DataTablesResult getRoleList();

    /**
     * 获取所有角色
     * @return
     */
    JSONResponse getAllRoles();

    /**
     * 添加角色
     * @param role
     * @return
     */
    JSONResponse addRole(Role role);

    /**
     * 通过角色名获取角色
     * @param roleName
     * @return
     */
    Role getRoleByRoleName(String roleName);

    /**
     * 判断角色编辑名是否已存在
     * @param id
     * @param roleName
     * @return
     */
    boolean getRoleByEditName(int id, String roleName);

    /**
     * 更新角色
     * @param role
     * @return
     */
    JSONResponse updateRole(Role role);

    /**
     * 删除角色
     * @param id
     * @return
     */
    int deleteRole(int id);

    /**
     * 统计角色数
     * @return
     */
    JSONResponse countRole();

    /**
     * 获得所有权限列表
     * @return
     */
    JSONResponse getPermissionList();

    /**

    /**
     * 统计权限
     * @return
     */
    JSONResponse countPermission();

    /**
     * 获取用户列表
     * @return
     */
    DataTablesResult getUserList();

    /**
     * 添加管理员
     * @param user
     * @return
     */
    JSONResponse addUser(User user);

    /**
     * 通过id获取
     * @param id
     * @return
     */
    User getUserById(Long id);

    /**
     * 通过用户名获取
     * @param username
     * @return
     */
    boolean getUserByName(String username);

    /**
     * 通过手机获取
     * @param phone
     * @return
     */
    boolean getUserByPhone(String phone);

    /**
     * 通过邮件获取
     * @param email
     * @return
     */
    boolean getUserByEmail(String email);

    /**
     * 更新用户
     * @param user
     * @return
     */
    JSONResponse updateUser(User user);

    /**
     * 更改状态
     * @param id
     * @param state
     * @return
     */
    JSONResponse changeUserState(Long id, int state);

    /**
     * 修改密码
     * @param user
     * @return
     */
    JSONResponse changePassword(User user);

    /**
     * 判断编辑用户名
     * @param id
     * @param username
     * @return
     */
    boolean getUserByEditName(Long id, String username);

    /**
     * 判断编辑手机
     * @param id
     * @param phone
     * @return
     */
    boolean getUserByEditPhone(Long id, String phone);

    /**
     * 判断编辑邮箱
     * @param id
     * @param emaill
     * @return
     */
    boolean getUserByEditEmail(Long id, String emaill);

    /**
     * 删除管理员
     * @param userId
     * @return
     */
    int deleteUser(Long userId);

    /**
     * 统计管理员
     * @return
     */
    JSONResponse countUser();


    /**
     * 根据角色id获取权限名
     * @return
     */
    JSONResponse getPermsByRoleId(Integer roleId);
}
